#include "sortview.h"
#include <QStringListModel>
#include <QListView>
#include <QSortFilterProxyModel>
#include <QLabel>
#include <QLineEdit>
#include <QHBoxLayout>
#include <QComboBox>

SortView::SortView(QWidget *parent) : QWidget(parent)
{
    // model为 proxyModel的源Model
    model = new QStringListModel(QColor::colorNames(), this);

    proxyModel =new QSortFilterProxyModel(this);
    // 设置proxyModel的源为 model
    proxyModel->setSourceModel(model);
    // proxyModel 仅仅对第一行进行过滤
    proxyModel->setFilterKeyColumn(0);

    view = new QListView(this);
    // 将view的model设为proxyModel, 而不是model
    view->setModel(proxyModel);

    // 设置匹配输入框
    QLineEdit* filterInput = new QLineEdit;
    QLabel *filterLabel = new QLabel(tr("Filter"));
    QHBoxLayout *filterLayout = new QHBoxLayout;
    filterLayout->addWidget(filterLabel);
    filterLayout->addWidget(filterInput);

    // 设置匹配方式
    syntaxBox = new QComboBox;
    syntaxBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
    syntaxBox->addItem(tr("Regular expression"), QRegExp::RegExp);
    syntaxBox->addItem(tr("Wildcard"), QRegExp::Wildcard);
    syntaxBox->addItem(tr("Fixed string"), QRegExp::FixedString);
    QLabel *syntaxLabel = new QLabel(tr("Syntax"));
    QHBoxLayout* syntaxLayout = new QHBoxLayout;
    syntaxLayout->addWidget(syntaxLabel);
    syntaxLayout->addWidget(syntaxBox);

    // 全局布局
    QVBoxLayout *layout = new QVBoxLayout(this);
    layout->addWidget(view);
    layout->addLayout(filterLayout);
    layout->addLayout(syntaxLayout);

    // 将 filterInput的输入信号连接到filterChanged槽函数
    connect(filterInput, SIGNAL(textChanged(QString)),
            this, SLOT(filterChanged(QString)));
}

SortView::~SortView()
{

}

void SortView::filterChanged(const QString &text)
{
    // 根据匹配方式构造匹配关键字
    QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(
                syntaxBox->itemData(syntaxBox->currentIndex()).toInt());
    QRegExp regExp(text, Qt::CaseInsensitive, syntax);

    // proxyModel设置匹配表达式
    proxyModel->setFilterRegExp(regExp);
}













